import 'dart:io';
import 'package:dev_compiler/src/compiler/shared_command.dart';
import 'package:test/test.dart';

void main(List<String> args) {
  String currentDir;
  setUpAll(() {
    currentDir = Directory.current.path.replaceAll(r'\', r'/');
    if (!currentDir.startsWith(r'/')) currentDir = "/$currentDir";
  });

  group('sourcePathToUri', () {
    test('various URL schemes', () {
      expect(sourcePathToUri("dart:io").toString(), "dart:io");
      expect(sourcePathToUri("package:expect/minitest.dart").toString(),
          "package:expect/minitest.dart");
      expect(sourcePathToUri("foobar:whatnot").toString(), "foobar:whatnot");
    });

    test('full Windows path', () {
      expect(
          sourcePathToUri("C:\\full\\windows\\path.foo", windows: true)
              .toString(),
          "file:///C:/full/windows/path.foo");
      expect(
          sourcePathToUri("C:/full/windows/path.foo", windows: true).toString(),
          "file:///C:/full/windows/path.foo");
    });

    test('relative Windows path', () {
      expect(
          sourcePathToUri("partial\\windows\\path.foo", windows: true)
              .toString(),
          "file://$currentDir/partial/windows/path.foo");
    });

    test('full unix path', () {
      expect(
          sourcePathToUri("/full/path/to/foo.bar", windows: false).toString(),
          "file:///full/path/to/foo.bar");
    });

    test('relative unix path', () {
      expect(
          sourcePathToUri("partial/path/to/foo.bar", windows: false).toString(),
          "file://$currentDir/partial/path/to/foo.bar");
    });
  });

  group('sourcePathToRelativeUri', () {
    test('various URL schemes', () {
      expect(sourcePathToRelativeUri("dart:io").toString(), "dart:io");
      expect(sourcePathToRelativeUri("package:expect/minitest.dart").toString(),
          "package:expect/minitest.dart");
      expect(sourcePathToRelativeUri("foobar:whatnot").toString(),
          "foobar:whatnot");
    });

    test('full Windows path', () {
      expect(
          sourcePathToRelativeUri("C:\\full\\windows\\path.foo", windows: true)
              .toString(),
          "file:///C:/full/windows/path.foo");
      expect(
          sourcePathToRelativeUri("C:/full/windows/path.foo", windows: true)
              .toString(),
          "file:///C:/full/windows/path.foo");
    });

    test('relative Windows path', () {
      expect(
          sourcePathToRelativeUri("partial\\windows\\path.foo", windows: true)
              .toString(),
          "partial/windows/path.foo");
    });

    test('full unix path', () {
      expect(
          sourcePathToRelativeUri("/full/path/to/foo.bar", windows: false)
              .toString(),
          "file:///full/path/to/foo.bar");
    });

    test('relative unix path', () {
      expect(
          sourcePathToRelativeUri("partial/path/to/foo.bar", windows: false)
              .toString(),
          "partial/path/to/foo.bar");
    });
  });
}
